const CryptoJS = require("crypto-js");

function formatTime(time) {
  if (typeof time !== "number" || time < 0) {
    return time;
  }

  var hour = parseInt(time / 3600);
  time = time % 3600;
  var minute = parseInt(time / 60);
  time = time % 60;
  var second = time;

  return [hour, minute, second]
    .map(function (n) {
      n = n.toString();
      return n[1] ? n : "0" + n;
    })
    .join(":");
}

function formatLocation(longitude, latitude) {
  if (typeof longitude === "string" && typeof latitude === "string") {
    longitude = parseFloat(longitude);
    latitude = parseFloat(latitude);
  }

  longitude = longitude.toFixed(2);
  latitude = latitude.toFixed(2);

  return {
    longitude: longitude.toString().split("."),
    latitude: latitude.toString().split("."),
  };
}
var dateUtils = {
  UNITS: {
    年: 31557600000,
    月: 2629800000,
    天: 86400000,
    小时: 3600000,
    分钟: 60000,
    秒: 1000,
  },
  humanize: function (milliseconds) {
    var humanize = "";
    for (var key in this.UNITS) {
      if (milliseconds >= this.UNITS[key]) {
        humanize = Math.floor(milliseconds / this.UNITS[key]) + key + "前";
        break;
      }
    }
    return humanize || "刚刚";
  },
  format: function (dateStr) {
    var date = this.parse(dateStr);
    var diff = Date.now() - date.getTime();
    if (diff < this.UNITS["天"]) {
      return this.humanize(diff);
    }
    var _format = function (number) {
      return number < 10 ? "0" + number : number;
    };
    return (
      date.getFullYear() +
      "/" +
      _format(date.getMonth() + 1) +
      "/" +
      _format(date.getDate()) +
      "-" +
      _format(date.getHours()) +
      ":" +
      _format(date.getMinutes())
    );
  },
  parse: function (str) {
    //将"yyyy-mm-dd HH:MM:ss"格式的字符串，转化为一个Date对象
    var a = str.split(/[^0-9]/);
    return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]);
  },
};

function myDebounce(callback, time) {
  let timer;
  return function () {
    let args = arguments;
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      // callback();
      callback.apply(null, args);
      timer = null;
    }, time);
  };
}

function myThrottle(callback, time) {
  let timer;
  return function () {
    let args = arguments;
    if (timer) {
      // clearTimeout(timer);
      return;
    }
    timer = setTimeout(() => {
      // callback();
      callback.apply(null, args);
      timer = null;
    }, time);
  };
}

// -防抖
function debounce(fn, wait) {
  let delay = wait || 1000;
  let timer;
  return function () {
    let args = arguments;
    if (timer) {
      clearTimeout(timer);
      console.log("拦截");
    }
    let callNow = !timer;
    timer = setTimeout(() => {
      console.log("发送");
      timer = null;
    }, delay);
    if (callNow) fn.apply(this, args);
  };
}

// -节流
function throttle(fn, wait) {
  let delay = wait || 500;
  let timer = null;
  return function () {
    if (timer) {
      console.log("拦截");
      return;
    }
    timer = setTimeout(() => {
      console.log("发送");
      fn.apply(this, arguments);
      timer = null;
    }, delay);
  };
}

function urlTobase64(url) {
  var toBase64Url;
  var promiseObj = uni
    .request({
      url,
      method: "GET",
      responseType: "arraybuffer",
    })
    .then((result) => {
      let [error, res] = result;
      let base64 = wx.arrayBufferToBase64(res.data);
      toBase64Url = "data:image/jpeg;base64," + base64;
      return toBase64Url;
    });

  return promiseObj;
}

const key = CryptoJS.enc.Utf8.parse("abc123def456ghi0");
// 解密方法
function Decrypt(word) {
  let decrypt = CryptoJS.AES.decrypt(word, key, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
  });
  let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
  return decryptedStr.toString();
}
// 加密方法
function Encrypt(word) {
  let srcs = CryptoJS.enc.Utf8.parse(word);
  let encrypted = CryptoJS.AES.encrypt(srcs, key, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
  });
  return encrypted.toString();
}

export {
  formatTime,
  formatLocation,
  dateUtils,
  debounce,
  throttle,
  urlTobase64,
  Decrypt,
  Encrypt
};
